#include "basic.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <float.h>

int ping_ip_alive(in_addr_t ip) {  // ping su ip attendendo risposta, torno 1 in caso affermativo, massima attesa 3 secondi
    struct in_addr address;
    address.s_addr=ip;
	char command[100]={0};
	strcpy(command,"ping ");
	strcat(command,inet_ntoa(address));
	strcat(command," -c 1 -w 3 | grep 'received' | awk -F',' '{ print $2}' | awk '{ print $1}' "); // isolo la conferma di ricezione
	FILE *f;
	char output[15]={0};
	f=popen(command,"r");
	fread(output,sizeof(char),10,f);
	fclose(f);
	if(output[0]=='1') return 1;  // ip vivo
	if(output[0]=='0') return 0;  // ip morto
	return -1;                    // errore
}

double ping_ip_time(in_addr_t ip) {              // ping su ip attendendo risposta, torno il tempo , massima attesa 3 secondi
    struct in_addr address;
    address.s_addr=ip;
	char command[100]={0};
	strcpy(command,"ping ");
	strcat(command,inet_ntoa(address));
	strcat(command," -c 1 -w 3 | grep 'time=' | awk '{ print $7}' "); // isolo il tempo
	FILE *f;
	char *output=malloc(20);
	f=popen(command,"r");
	fread(output,sizeof(char),10,f);
	output = output+5;                  // cancello il "time=" e converto il tempo in double
    double time=atof(output);          // ascii to double
	fclose(f);
	output= output-5;                 // repristino puntatore per la free
	free(output);
    if(time==0) time=DBL_MAX;   // scade il tempo max (3 sec) il ping e' impostato a infinito
	return time;                    // ping in millisecondi da ip destinazione
}
